Contextually-Appropriate Task Reminders

ABSTRACT

A computing device learns over time how to identify task reminders that are most likely to be helpful to a user in different contexts. The task reminders can remind the user of activities that the user needs to do. The computing device displays a graphical user interface (GUI) that contains the task reminders identified as being most likely to be helpful to the user in the user&#39;s current context. The computing device updates the task reminders in the GUI as the user&#39;s context changes. In this way, the computing device can present task reminders that are likely to be currently helpful to the user while suppressing task reminders that are less likely to be helpful to the user at the current time.

CROSS REFERENCE TO RELATED APPLICATIONS

This application is a continuation of U.S. patent application Ser. No.13/071,895, filed Mar. 25, 2011, and entitled CONTEXTUALLY-APPROPRIATETASK REMINDERS, now Pat. No. 8,766,793, issued on Jul. 1, 2014, of whichthe disclosure is incorporated by reference herein in its entirety.

BACKGROUND

In everyday life, there are many tasks that people need to perform. Attimes, people have so many tasks to perform that they cannot easilyremember to perform all of them. To remind themselves of their tasks,people create systems of reminders. For example, people can create paperor electronic task lists, post sticky notes around their offices andhomes, make notes on paper or electronic calendars or planners, setreminder flags on emails, or make other types of reminders.

Even with such reminder systems, people still find it difficult toremember all of the tasks that they need to perform. Consequently,people need reminders of the tasks that they need to perform. Manyelectronic calendaring and task management systems provide suchreminders. For example, an electronic calendaring system can display apopup window on a person's computer fifteen minutes before the person isto attend a meeting.

However, there are many situations where people do not benefit from suchelectronic task reminders. Indiscriminate use of task reminders canannoy people or lead people to ignore the task reminders. For example,it may be pointless to remind a person of a task that the person cannotperform. For instance, it may be pointless or annoying to remind aperson to pick up milk when the person is in a business meeting or phonecall. In another instance, it may be pointless to remind a person tocall a co-worker when the co-worker is unavailable to take phone calls.In another example, it may be pointless to remind a person of tasks thatcan be performed at a significantly later time. For instance, it may bepointless to remind a person to pick up the person's dry cleaning nextweek.

SUMMARY

A computing device learns over time how to identify which task remindersare most appropriate to present to a user in different contexts. Thecomputing device displays a graphical user interface (GUI) that containsthe task reminders identified as most appropriate to present to the userin a current context. Unless instructed to do so by the user, thecomputing device does not present the task reminders identified as lessappropriate in the current context. By only presenting the mostappropriate task reminders for the current context, the computing devicecan attempt to minimize the risk that the user will be distracted orannoyed by reminders that are unlikely to be helpful to the user. At thesame time, by presenting the most appropriate reminders for the currentcontext, the computing device can help the user make more productive useof the user's time.

BRIEF DESCRIPTION OF THE DRAWINGS

FIG. 1 is a diagram of a system in which a user uses a computing device.

FIG. 2 illustrates example details of the computing device.

FIG. 3 illustrates an example expanded reminder area in a userinterface.

FIG. 4 is a block diagram illustrating example components of thecomputing device.

FIG. 5 is a flowchart illustrating an example operation of a remindermodule.

FIG. 6 is a flowchart illustrating an example artificial neural networkalgorithm for calculating scores for task reminders.

FIG. 7 is a block diagram illustrating example physical components ofthe computing device.

DETAILED DESCRIPTION

FIG. 1 is a block diagram of an example system 100 in which a user 102uses a computing device 104. The user 102 is an individual person. Forinstance, the user 102 can be an employee of a company or a member ofthe general public. As part of daily life of the user 102, the user 102performs various tasks. For example, the user 102 may need to prepare asales presentation for work. In another example, the user 102 may needto pick up milk at the grocery store. In yet another example, the user102 may need to talk to another person about some activity.

The computing device 104 can be a variety of different types ofcomputing devices. For example, the computing device 104 can be a smartphone, a tablet computer, a laptop computer, a netbook computer, adesktop computer, a computer workstation, an in-car computer, anappliance, or another type of computing device.

The computing device 104 can communicate with other computing devices(not shown) via a communication network 106. For example, the computingdevice 104 can communicate over the network 106 with a server, atelephone device, a personal computing device, a tablet computer, anetworked appliance or sensor, or another type of computing device. Invarious embodiments, the network 106 can comprise various types ofcommunication network. For example, the network 106 can be a telephonenetwork, the Internet, a local area network, or another type ofcommunication network. The network 106 can include wired and/or wirelesscommunication links.

As the current context of the user 102 changes, the computing device 104provides task reminders to the user 102 that arecontextually-appropriate in the current context of the user 102. Inother words, the computing device 104 determines, based on a currentcontext of the user 102, that the user 102 would likely find it helpfulto be reminded to perform one or more tasks. The context of the user 102comprises a state of the user's world at a given point in time. Thecontext of the user 102 can involve aspects of the user's environment,situation, or circumstances. In this instance, the computing device 104provides to the user 102 reminders to perform these tasks. For example,one of the tasks of the user 102 may be to buy milk. In this example,the computing device 104 can determine, based on the fact that the user102 is driving near a grocery store, that the user 102 would likely findit helpful to be reminded that the user 102 is to buy milk at thegrocery store. In another example, one of the tasks of the user 102 maybe to call a colleague. In this example, the computing device 104 candetermine, based on the fact that the colleague's online status changedfrom busy to available, that now would be a good time for the user 102to call the colleague. In this way, the computing device 104 can remindthe user 102 to perform certain tasks when it becomes appropriate forthe user 102 to actually perform such tasks.

The computing device 104 can learn over time which task reminders wouldlikely be helpful to the user 102 in different situations. Because ofthe large number of situations that the user 102 can be in, it may beimpractical in some embodiments to use fixed program rules fordetermining which task reminders would likely be helpful to the user 102in different situations. In such embodiments, the computing device 104can use feedback from the user 102 and/or other sources. The computingdevice 104 modifies how the computing device 104 identifies thecontextually-appropriate task reminders in response to the feedback. Inthis way, the computing device 104 can use the feedback to learn whichtask reminders would likely be most helpful in various contexts.Consequently, the computing device 104 can learn over time to presentdifferent, more appropriate task reminders in similar situations.

FIG. 2 illustrates example details of the computing device 104. Asillustrated in the example of FIG. 2, the computing device 104 has adisplay unit 200. The display unit 200 displays a graphical userinterface (GUI) 202. The GUI 202 includes a reminder area 204 and anactivity area 205. The reminder area 204 is an area within the GUI 202for presenting task reminders. The activity area 205 occupies most ofthe GUI 202 and contains data and features used by the user 102 toperform most activities. In the example of FIG. 2, the reminder area 204is a horizontal bar adjacent to a top edge of the activity area 205. Insome instances, the reminder area 204 can be a vertical bar adjacent toa side edge of the activity area 205. Furthermore, in some instances,the reminder area 204 can switch from being a horizontal bar to being avertical bar and vice versa in response to changes to the orientation ofthe computing device 104 or other input.

As illustrated in the example of FIG. 2, the reminder area 204 includestask reminders 206A-206D (collectively, “task reminders 206”). Each ofthe task reminders 206 is a reminder to the user 102 to perform aparticular task. For example, the task reminder 206A can remind the user102 to call a particular person. In this example, the task reminder 206Bcan remind the user 102 to work on a particular word processor document.Furthermore, in this example, the task reminder 206C can remind the user102 to meet with a particular person. In this example, the task reminder206D can remind the user 102 to pick up dry cleaning.

In the example of FIG. 2, the task reminders 206 comprise graphicalicons associated with the corresponding tasks. For example, the taskreminder 206A includes an icon shaped like a telephone to indicate thatthe corresponding task is to make a phone call another person. In otherembodiments, the task reminders 206 can include additional informationabout the corresponding tasks. For example, the task reminders 206 caninclude brief text messages describing the corresponding tasks. Inanother example, if one of the task reminders 206 corresponds to a taskinvolving communication with another person, the task reminder caninclude text or images indicating the other person's online availabilitystatus. Furthermore, in some embodiments, the task reminders 206 caninclude animated graphics. For instance, if one of the task reminders206 corresponds to a telephone call that the user 102 to presentlymaking, the task reminder can include an animated graphic indicating anamplitude of sound in the telephone call.

As the current context of the user 102 changes, the computing device 104updates the reminder area 204 such that the reminder area 204 containstask reminders that are contextually-appropriate in the current contextof the user 102. For instance, the computing device 104 can order thetask reminders 206 within the reminder area 204 based on the likelihoodsthat the user 102 would find it helpful to be reminded of thecorresponding tasks. For example, the computing device 104 hasdetermined that it is most likely that the user 102 would find ithelpful to be reminded of the task corresponding to the reminder 206A.The computing device 104 has determined that it is next most likely thatthe user 102 would find it helpful to be reminded of the taskcorresponding to the reminder 206B, and so on.

The user 102 can select the reminders 206 to instruct the computingdevice 104 to perform an action regarding the corresponding tasks. Forexample, the user 102 can select the reminders 206 to instruct thecomputing device 104 to display additional information about thecorresponding tasks. In another example, the user 102 can select one ofthe reminders 206 corresponding to a phone call task to instruct thecomputing device 104 to make a phone call to a particular person. In yetanother example, the user 102 can select one of the reminders 206corresponding to a document to instruct the computing device 104 to openthe document.

In various embodiments, the user 102 can select the reminders 206 byproviding various types of selection input to the computing device 104.For example, in embodiments where the display unit 200 is a touchscreen, the user 102 can select the reminders 206 by tapping on thereminders 206 with a finger or a stylus. In another example, the user102 can select the reminders 206 by clicking on the reminders 206 with amouse or pointing device controlled cursor. In some embodiments, theactivity area 105 displays more information about one of the taskreminders 206 when the user 102 selects the task reminder. In some suchembodiments, the user 102 can view more information about another one ofthe task reminders 206 by making a left or right flicking gesture on theactivity area 205 or by selecting one or more controls in the activityarea 105.

Furthermore, the reminder area 204 includes a scroll control 208. In theexample of FIG. 2, there is only sufficient room in the reminder area204 for four task reminders. However, the user 102 may need to performmore than four tasks. The user 102 can use the scroll control 208 toinstruct the computing device 104 to scroll the reminder area 204 todisplay task reminders for additional tasks that the user 102 needs toperform. The computing device 104 has determined that these other taskreminders are less likely to be useful to the user 102 in the currentcontext than the reminders 206. In other embodiments, the user 102 caninstruct the computing device 104 to display additional task remindersin other ways. For example, the display unit 200 can be a touch screen.In this example, the user 102 can instruct the computing device 104 todisplay additional task reminders by making a flicking or dragginggesture across the reminder area 204.

In addition to the reminder area 204, the GUI 202 can include otherfeatures. In the example of FIG. 2, the activity area 205 of the GUI 202includes an email 210. The email 210 includes a set of task sourceelements 212 and a control 216. As described below, the user 102 can usethe task source elements 212 to create task reminders. The user 102 canuse the control 216 to flag the email 210.

FIG. 3 illustrates an example expanded reminder area 300 in the GUI 202.At times, the reminder area 204 (FIG. 2) may not show enough informationto enable to the user 102 to be reminded what tasks to perform. In otherwords, the user 102 may want to see additional information about thetasks that the user 102 needs to perform. Accordingly, the user 102 caninstruct the computing device 104 to display the expanded reminder area300 instead of the reminder area 204.

The expanded reminder area 300 contains expanded reminders 302A-G(collectively, “expanded reminders 302”). The expanded reminders 302include additional information about the tasks that the user 102 needsto perform. The computing device 104 can order the expanded reminders302 within the expanded reminder area 300 based on how helpful thecomputing device 104 expects the expanded reminders 302 to be given thecurrent situation.

At least some of the expanded reminders 302 correspond to the reminders206 in the reminder area 204. For example, the expanded reminder 302Acorresponds to the reminder 206A. In this example, the expanded reminder302A includes the icon of the reminder 206A and also includes the text“Call Jesse at 555-9876 re: lunch”. In this way, the expanded reminder302A includes additional information about the task corresponding to theexpanded reminder 302A and the reminder 206A.

Similar to the reminders 206, the user 102 can select the expandedreminders 302 to instruct the computing device 104 to perform actionsregarding the corresponding tasks. Furthermore, in the example of FIG.3, the expanded reminder area 300 only includes sufficient space forseven expanded reminders 302. When the user 102 has more than seventasks to perform, the user 102 can, as with the reminder area 204,scroll the expanded reminder area 300 to reveal additional expandedreminders corresponding to additional tasks.

In various embodiments, the user 102 can instruct the computing device104 to display the expanded reminder area 300 instead of the reminderarea 204 in various ways. For example, the user 102 can select a control214 (FIG. 2) in the reminder area 204 and drag the control 214 downwardto instruct the computing device 104 to display the expanded reminderarea 300. In this example, the user 102 can drag the control 214 upwardto instruct the computing device 104 to display the reminder area 204instead of the expanded reminder area 300. In another example, the user102 can select an onscreen toggle control to switch between the reminderarea 204 and the expanded reminder area 300.

FIG. 4 is a block diagram illustrating example components of thecomputing device 104. As illustrated in the example of FIG. 4, thecomputing device 104 includes the display unit 200. As discussed above,the computing device 104 can display the GUI 202 on the display unit200. In other embodiments, the display unit 200 is separate from thecomputing device 104. For example, the display unit 200 can be aseparate monitor device. In yet another example, the display unit 200can be attached to or be part of another computing device. In thisexample, the computing device 104 generates information that the othercomputing device uses to display the GUI 202.

Furthermore, the computing device 104 provides a reminder module 400.The reminder module 400 generates task reminders, determines which ofthe task reminders are contextually-appropriate, and updates the GUI 202accordingly. The computing device 104 can comprise one or more computerstorage media that store instructions. One or more processing units inthe computing device 104 can access and execute these instructions.Execution of these instructions by the one or more processing unitsconfigures the computing device 104 such that the computing device 104provides the functionality of the reminder module 400. In other words,execution of these instructions causes the computing device 104 toprovide the reminder module 400.

In addition to the reminder module 400, the computing device 104includes a set of task sources 402. The task sources 402 are datasources that provide data that the reminder module 400 uses to generatetask reminders. In various embodiments, the computing device 104includes various task sources. In the example of FIG. 4, the tasksources 402 in the computing device 104 include a task list 404, a setof communication prompts 406, a flagged documents list 407, a calendar408, a telephony system 410, and a contact list 412. Readers willappreciate that the computing device 104 can include more, fewer, ordifferent task sources 402 than those illustrated in the example of FIG.4.

The task list 404 is an explicit list of tasks entered by the user 102or another person, such as a secretary of the user 102. For example, thetask list 404 can include task entries having a description field and adue date field. In this example, the description field of a task entrycan include text, such as “Finish cash flow report,” and the due datefield can include a date, such as “Mar. 21, 2011.” Various embodimentsenable the user 102 to create entries in the task list 404 in variousways. For example, some embodiments enable the user 102 to type ordictate entries into the task list 404.

The communication prompts 406 are items created by the user 102 toremind the user 102 to communicate with one or more other people. Forexample, the user 102 can create one of the communication prompts 406 toremind the user 102 to call as person named “Jesse” at a particularphone number. In some embodiments, the computing device 104 stores thecommunication prompts 406 as entries in the task list 404. In otherembodiments, the communication prompts 406 are stored separate from thetask list 404.

Various embodiments enable the user 102 to create the communicationprompts 406 in various ways. For example, the computing device 104 candetect task source elements in emails or other documents. The tasksource elements are elements that can serve as the bases for taskreminders. In this example, the computing device 104 highlights thedetected task source elements or otherwise visually differentiates thedetected task source elements from elements that are not configured toserve as bases for task reminders. Furthermore, in this example, theuser 102 can create the communication prompts 406 by dragging variousones of the task source elements 212 (FIG. 2) to the reminder area 204.For example, one of the task source elements 212 in the email 210contains a telephone number. The user 102 can create a communicationprompt to remind the user 102 to make a phone call to the person “Joe,”by dragging this task source element to the reminder area 204.

After dragging this task source element to the reminder area 204, thecomputing device 104 can display data entry controls in the GUI 202 thatenable the user 102 to provide more information about the correspondingtask. For example, the computing device 104 can display data entrycontrols that enable the user 102 to specify a deadline forcommunicating with another person, a reason for communicating with theother person, and other information about the task of communicating withthe other person. Example data entry controls include textboxes, textareas, check boxes, drop boxes, radio buttons, and other onscreenelements that facilitate user entry of data.

The flagged documents list 407 includes a list of flagged documents. Insome circumstances, the user 102 may be working on a document but thenneed to perform some other activity. For example, the user 102 may beusing the computing device 104 to compose or review a word processordocument or email, but then may need to go to a meeting. In suchcircumstances, the user 102 can flag the document in order to rememberto resume working on the document. The flagged documents list 407includes references to such documents flagged by the user 102. When theuser 102 flags a document, the computing device 104 can display dataentry controls that enable the user 102 to provide input to thecomputing device 104 containing additional information about how andwhen the user 102 wants to resume working on the document.

In various embodiments, the user 102 can flag a document in variousways. For example, when the computing device 104 displays the documentin the activity area 205 of the GUI 202, the computing device 104displays a flag control in the document. The user 102 can use the flagcontrol to flag the document. As illustrated in the example of FIG. 2,the email 210 includes a flag control 216. In the example of FIG. 2, theflag control 216 is shaped to evoke the concept of dog-earing a page ina book by bending over a corner of the page. One state of the flagcontrol 216 can indicate that the email 210 is flagged, another state ofthe flag control 216 can indicate that the email 210 is not flagged. Inthe example of FIG. 2, the flag control 216 is in a bent or dog-earedstate to indicate that the email 210 is flagged.

The calendar 408 stores event entries. The event entries include dataregarding events that are to occur on specified calendar days. Forexample, the calendar 408 can include an event entry containing dataregarding a meeting. In this example, the event entry can specify thatthe meeting is to occur on Aug. 12, 2011, starting at 3:00 p.m. andending at 4:00 p.m. In addition, the event entry can specify a locationof the meeting, a description of the meeting, anticipated attendees ofthe meeting, and other information regarding the meeting.

The telephony system 410 handles telephony sessions for the computingdevice 104. For example, the user 102 can use functionality provided bythe telephony system 410 to make and receive phone or video calls. Whenthe user 102 is using the computing device 104 to make or receive acall, the reminder module 400 can use data from the telephony system 410to create a task reminder that reminds the user 102 that the call isoccurring. Reminding the user 102 that the call is occurring can behelpful to the user 102 when the user 102 is concurrently using thecomputing device 104 to perform actions in addition to the call.

The contact list 412 comprises sets of contact information about otherpeople. For example, the contact list 412 can include a set of contactinformation about a person “Joe” and another set of contact informationabout a person “Lucy.” The set of contact information about a person caninclude the person's work phone number, mobile phone number, emailaddress, home or business postal address, and other information aboutthe person.

Furthermore, the computing device 104 includes a set of context sources414. The context sources 414 are data sources that provide context datato the reminder module 400. The context data are indicative orrepresentative of the context of the user 102. The reminder module 400can use the context data provided by the context sources 414 todetermine the current context or situation of the user 102. Forinstance, the reminder module 400 can use the context data to generatedata representative of likelihoods that the user 102 would find giventask reminders helpful.

In various embodiments, the computing device 104 includes variouscontext sources 414. In the example of FIG. 4, the context sources 414in the computing device 104 include a global positioning system (GPS)module 416, one or more accelerometers 418, a clock 420, the calendar408, the telephony system 410, and the contact list 412. Readers willappreciate that the computing device 104 can include more, fewer, ordifferent context sources 414 than those illustrated in the example ofFIG. 4. Furthermore, readers will note that some of the context sources414 (i.e., the calendar 408, the telephony system 410, and the contactlist 412) are also among the task sources 402.

The GPS module 416 generates data indicating a geographical location ofthe computing device 104. The accelerometers 418 generate dataindicating the acceleration of the computing device 104. The clock 420generates data indicating a current time.

In various embodiments, the task sources 402 and the context sources 414are implemented in various ways. For example, the computing device 104can include special hardware units implementing one or more of the tasksources 402 and the context sources 414. Furthermore, one or moreprocessing units in the computing device 104 can execute instructionsthat cause the computing device 104 to provide one or more of the tasksources 402 and one or more of the context sources 414.

FIG. 5 is a flowchart illustrating an example operation 500 of thereminder module 400. As illustrated in the example of FIG. 5, thereminder module 400 determines whether the reminder module 400 hasreceived new or updated task data (502). As discussed briefly above, thereminder module 400 receives the task data from the task sources 402.From time to time, the task data provided by the task sources 402changes in a relevant way. For example, the user 102 can add a new taskentry to the task list 404 or update a given task entry in the task list404. In this example, the reminder module 400 can receive datarepresenting the new task entry or the updated task entry. In anotherexample, the user 102 can add a new communication prompt to the set ofcommunication prompts 406. In this example, the reminder module 400receives data regarding the new communication prompt.

Furthermore, in some embodiments, the reminder module 400 can receivetask data from data sources that are outside the computing device 104.As explained above, the computing device 104 is able to communicate withone or more other computing devices through the network 106. These othercomputing devices on the network 106 can provide task data to thereminder module 400. For example, one of the computing devices on thenetwork 106 can host an online calendaring service. In this example, thereminder module 400 can receive event entries from the onlinecalendaring service. In another example, the computing device 104 cancommunicate over the network 106 with an in-car computer in the user'scar. In this example, the reminder module 400 can receive data from thein-car computer indicating that the car needs an oil change, needsrecharging, needs gasoline, or otherwise requires the user 102 toperform some task regarding the car. In yet another example, thecomputing device 104 can communicate over the network 106 with theuser's refrigerator. In this example, the reminder module 400 canreceive data from the refrigerator indicating that the user 102 is lowon milk or other groceries and needs to buy more. In this example, thereminder module 400 can learn over time that it iscontextually-appropriate to display task reminders corresponding tocertain geographical locations (e.g., grocery stores) when the currentgeographical location of the computing device 104 is within a givendistance of such geographical locations.

In various embodiments, the reminder module 400 can receive the taskdata in various ways. For example, the reminder module 400 can subscribeto one or more of the task sources 402 or external sources of task data.In this example, the task sources 402 or external task data sourcesautonomously provide data to subscribed components. In another example,the reminder module 400 can periodically poll one or more of the tasksources 402 or external sources of task data. In this example, the tasksources 402 or the external task data sources provide task data to thereminder module 400 in response to periodic requests from the remindermodule 400.

If the reminder module 400 receives new or updated task data (“YES” of502), the reminder module 400 uses the task data to generate, update, ordelete one or more task reminders, such as the task reminders 206 (504).As suggested above, the reminder module 400 can generate reminders fromvarious types of task data. For example, the reminder module 400 cangenerate reminders for each task entry in the task list 404. In thisexample, the reminder module 400 can delete a reminder if the user 102marks a corresponding task entry in the task list 404 as completed. Inanother example, the reminder module 400 can generate task reminders forevents in the calendar 408. In this example, the reminder module 400 candelete a reminder after the corresponding event in the calendar 408 isover. In yet another example, the reminder module 400 can generatereminders for each flagged document in the flagged documents list 407.In this example, the reminder module 400 can delete a reminder if theuser 102 un-flags the document corresponding to the reminder.

In yet another example, the user 102 can generate a communication promptto remind the user 102 call a person named “Joe” by dragging the name“Joe” in one of the task source elements 212 (FIG. 2) to the reminderarea 204. In this example, the contact list 412 includes a set ofcontact information for Joe. In this example, the reminder module 400can use the set of contact information for Joe to create a task reminderthat includes Joe's phone number and address by importing Joe's phonenumber and address from the contact list 412.

In yet another example, the activity area 205 can include a list ofcontacts in the contact list 412. In this example, the user 102 can draga given contact in the list of contacts to the reminder area 204. Inresponse, the reminder module 400 can generate a new task reminder thatreminds the user 102 to perform some task involving a person associatedwith the given contact.

In some embodiments, the reminder module 400 has an extensiblearchitecture such that the functionality of the reminder module 400 canbe extended to generate reminders from additional types of task data.For example, the reminder module 400 initially cannot generate remindersfrom data generated by an in-car computer. In this example, the remindermodule 400 can accept a plug-in that enables the reminder module 400 togenerate task reminders from data generated by the in-car computer.

If the reminder module 400 has not received new or updated task data(“NO” of 502), the reminder module 400 determines whether the remindermodule 400 has received new or updated context data (506). As discussedbriefly above, the reminder module 400 receives the context data fromthe context sources 414. From time to time, the context data provided bythe context sources 414 changes in a relevant way. For example, the GPSmodule 416 can indicate that the computing device 104 has moved from onepart of town to another part of town. In another example, theaccelerometers 418 can indicate that the computing device 104 isaccelerating in a manner consistent with the computing device 104 beingtransported in a car. In another example, the reminder module 400 canreceive data from the calendar 408 indicating that the user 102 isscheduled to be in a meeting at a particular time.

Furthermore, in some embodiments, the reminder module 400 can receivecontext data from data sources that are outside the computing device104. As explained above, the computing device 104 is able to communicatewith one or more computing devices through the network 106. These othercomputing devices on the network 106 can provide context data to thereminder module 400. For example, one of the computing devices on thenetwork 106 can host a service that provides meteorological data, suchas whether it is going to rain in a particular location on a particularday. In this example, the ability of the user 102 to perform some tasksis dependent on the weather. For instance, mowing the lawn can be amongthe tasks that the user 102 needs to perform. However, if it iscurrently raining, it may be pointless to remind the user 102 to mow thelawn. Conversely, if it is going to rain tomorrow, it may be helpful toremind the user 102 to mow the lawn today.

If the reminder module 400 has not received new or updated context data(“NO” of 506), the reminder module 400 restarts the operation 500. Insome embodiments, the reminder module 400 can sleep until the remindermodule 400 receives new or updated task or context data.

On the other hand, if the reminder module 400 has received new orupdated context data (“YES” of 506) or after the reminder module 400generates, updates, or deletes a reminder (504), the reminder module 400uses a machine learning algorithm to calculate scores for the reminders(508). The scores are numerical values indicative of the likelihoodsthat the user 102 would find it helpful to be reminded of the taskscorresponding to the reminders given a current context. In variousembodiments, the reminder module 400 uses various machine learningalgorithms to calculate the scores for the reminders. FIG. 6, describedin detail below, provides one example artificial neural networkalgorithm for calculating the scores for the reminders. In otherembodiments, the reminder module 400 can use an inductive logicprogramming algorithm, a cluster analysis algorithm, a Bayesian networkalgorithm, a reinforcement learning algorithm, or another type ofmachine learning algorithm when identifying the most helpful taskreminders in the current context.

After calculating the scores for the reminders, the reminder module 400re-ranks the reminders based on their scores (510). For instance, thereminder module 400 can compare the scores of the reminders to determinethat one reminder has a highest score, another reminder as a nexthighest score, and so on.

After re-ranking the reminders, the reminder module 400 determineswhether the set of top-ranked reminders has changed (512). The set oftop-ranked reminders includes a predetermined number of reminders. Forinstance, in the example of FIG. 2, the set of top-ranked reminders caninclude a maximum of four reminders because there is only enough room inthe reminder area 204 for four reminders. Thus, the reminder area 204only displays the reminders having the top four ranks and does notdisplay the reminders having lower ranks. In some embodiments, the user102 can configure the number of reminders in the set of top-rankedreminders. The set of top-ranked reminders can change when a newreminder enters the set of top-ranked reminders. Furthermore, in someinstances, the set of top-ranked reminders can change when the ranks ofreminders in the top-ranked reminders change.

If the set of top-ranked reminders has not changed (“NO” of 512), theoperation 500 restarts. Otherwise, if the set of top-ranked remindershas changed (“YES” of 512), the reminder module 400 updates the reminderarea 204 in the GUI 202 to display the set of top-ranked reminders(514). In this way, the user 102 can see the set of top-ranked remindersin the reminder area 204. Because the top-ranked reminders have thehighest scores and because the scores are associated with likelihoodsthat the user 102 would find it helpful to be reminded of thecorresponding tasks, the user 102 can see in the reminder area 204reminders of the tasks that the user 102 would most likely find ithelpful to be reminded. In other words, the user 102 can see in thereminder area 204 the most contextually-appropriate reminders.

In addition to updating the reminder area 204, the reminder module 400can perform a notification action when the set of top-ranked reminderschanges (516). For example, the reminder module 400 can cause a vibratorunit in the computing device 104 to vibrate. In another example, thereminder module 400 can cause a speaker unit in the computing device 104to output a sound. In this way, the computing device 104 notifies theuser 102 that the set of top-ranked reminders has changed. In someembodiments, the user 102 can limit the frequency at which the remindermodule 400 can perform the notification action or disable thenotification action. Moreover, in some embodiments, the user 102 canselect notification actions for the reminder module 400 to perform whencertain types of reminders enter the set of top-ranked reminders.

Furthermore, in some embodiments, the reminder module 400 can learn overtime how to identify the most appropriate notification actions forvarious contexts. Consequently, the reminder module 400 can determinethat a given notification action is more likely than a plurality ofother available notification actions to be a most appropriatenotification action given the current context of the user 102. Forexample, the reminder module 400 can learn that vibrating is the mostappropriate notification action when the calendar 408 indicates that theuser 102 is currently in a meeting. In another example, the remindermodule 400 can learn that playing a message through the user's carstereo can be the most appropriate notification action when theaccelerometers 418 indicate that the user 102 is driving. In yet anotherexample, the reminder module 400 can learn that the user 102 does notwant the reminder module 400 to perform a notification action when taskreminders corresponding to particular types of tasks enter the set oftop-ranked reminders. The reminder module 400 can use an artificialneural network algorithm or another machine learning algorithm toidentify the most appropriate notification actions for various contexts.

After the reminder module 400 performs the notification action, theoperation 500 repeats. By repeating the operation 500 multiple timesover the course of a day, the reminder module 400 can providecontextually-appropriate task reminders to the user 102 as the currentcontext of the user 102 changes over the course of the day.

FIG. 6 is a flowchart illustrating an example artificial neural network(ANN) algorithm 600 for calculating scores for reminders. In the exampleof FIG. 6, the reminder module 400 performs the ANN algorithm 600 foreach reminder.

As illustrated in the example of FIG. 6, the reminder module 400 firstprovides a set of artificial neurons in an artificial neuron network(602). The set of artificial neurons includes an input layer, one ormore intermediate layers, and an output layer. Artificial neurons in theeach layer, aside from the output layer, provide their outputs to thenext layer of artificial neurons. For instance, artificial neurons inthe input layer provide their outputs to artificial neurons in a firstintermediate layer. Artificial neurons in each layer, aside from theinput layer, receive their inputs from a previous layer of artificialneurons. Each artificial neuron performs a function on its inputs togenerate an output. The function involves one or more weight values. Thefunction can produce different output values from the same set of inputvalues if the weight values of the function are different.

To generate the score for a given task reminder, the reminder module 400provides input to the input layer artificial neurons (604). The inputcan include a wide variety of different types of data. For example, theinput can include context data received from the context sources 414,context data received from sources outside the computing device 104,data about other tasks of the user 102, data regarding the taskcorresponding to the given task reminder, and other types of data. Thedata regarding the task corresponding to the given task reminder caninclude a due date for the corresponding task, a priority level of thecorresponding task, a location associated with the corresponding task, asource of the given task reminder, a task type of the correspondingtask, start and end times of the corresponding task, a description ofthe corresponding task, people associated with the corresponding task,and other types of data regarding the corresponding task.

Providing the input to the input layer artificial neurons starts theprocess in which the input layer artificial neurons apply weightedfunctions to generate outputs that are provided as inputs to the nextlayer of artificial neurons. This process continues until the remindermodule 400 receives a score for the given reminder from one or moreartificial neurons in the output layer (606).

After receiving the score, the reminder module 400 receives feedbackfrom the user 102 (608). The feedback can indicate whether the scoreassigned to the given reminder was too high or too low. In variousembodiments, the reminder module 400 can receive feedback from the user102 in various ways. For example, the reminder module 400 can receiveinput from the user 102 to reorder the reminders in the expandedreminder area 300. In the example of FIG. 3, if the user 102 thinks thatthe reminder 302C is ranked too high or too low, the user 102 can dragthe reminder 302C down or up such that the reminder 302C is at anappropriate place relative to the other ones of the expanded reminders302. For instance, if the user 102 thinks the reminder 302C is rankedtoo highly, the user 102 can drag the reminder 302C down to a positionbetween the reminders 302F and 302G.

After receiving the feedback, the reminder module 400 applies thefeedback to the artificial neurons (610). Applying the feedback to theartificial neurons can result in changes to the weights used in thefunctions of one or more of the artificial neurons. In variousembodiments, the reminder module 400 uses various algorithms to applythe feedback to the artificial neurons. For example, the reminder module400 can use evolutionary methods, simulated annealing,expectation-maximization algorithms, non-parametric methods, particleswarm optimization, and other algorithms for training artificial neuralnetworks.

By providing sufficient feedback over time, the user 102 can train theartificial neural network to determine which reminders are appropriatein particular contexts. For example, the artificial neural network canbe trained to assign relatively greater scores to reminders for tasksthat involve the user 102 calling another person when the other personhas an online status of “available” than when the other person has anonline status of “busy.” In another example, the artificial neuralnetwork can be trained to assign relatively lower scores to remindersfor tasks that involve the user 102 calling another person when the user102 is scheduled to be in a meeting at the current time. In yet anotherexample, the artificial neural network can be trained to assignrelatively lower scores to certain tasks based on information posted onsocial networking sites. In yet another example, the artificial neuralnetwork can be trained to assign relatively lower scores to tasks thatthe user 102 routinely completes without requiring task reminders.

FIG. 7 is a block diagram illustrating example physical components ofthe computing device 104. It should be appreciated that in otherembodiments, the computing device 104 is implemented using computingdevices having hardware components other than those illustrated in theexample of FIG. 7.

As used herein, the term computer readable media may include computerstorage media and communication media. As used in this document, acomputer storage medium is a device or article of manufacture thatstores data and/or computer-executable instructions. A computer storagemedium does not consist of transitory signals. Computer storage mediamay include volatile and nonvolatile, removable and non-removabledevices or articles of manufacture implemented in any method ortechnology for storage of information, such as computer readableinstructions, data structures, program modules, or other data. By way ofexample, and not limitation, computer storage media may include dynamicrandom access memory (DRAM), double data rate synchronous dynamic randomaccess memory (DDR SDRAM), reduced latency DRAM, solid state memory,read-only memory (ROM), electrically-erasable programmable ROM, opticaldiscs (e.g., CD-ROMs, DVDs, etc.), magnetic disks (e.g., hard disks,floppy disks, etc.), magnetic tapes, and other types of devices and/orarticles of manufacture that store data.

Communication media may include any information delivery media thatcarries computer-executable instructions, data structures, programmodules, or other data in a modulated data signal. The term “modulateddata signal” may describe a signal that has one or more characteristicsset or changed in such a manner as to encode information in the signal.By way of example, and not limitation, communication media may includewired media such as a wired network or direct-wired connection, andwireless media such as acoustic, radio frequency (RF), infrared, andother wireless media.

In the example of FIG. 7, the computing device 104 comprises a memory702, a processing system 704, a secondary storage device 706, a networkinterface card 708, a video interface 710, the display unit 200, anexternal component interface 714, and a communication medium 716. Thememory 702 includes one or more computer storage media capable ofstoring data 718 and/or computer-executable instructions 720.

The secondary storage device 706 includes one or more computer storagemedia. The secondary storage device 706 stores data 722 andcomputer-executable instructions 724 not directly accessible by theprocessing system 704. In other words, the processing system 704performs an I/O operation to retrieve data and/or software instructionsfrom the secondary storage device 706.

The processing system 704 includes one or more processing units. Aprocessing unit is a physical device or article of manufacturecomprising one or more integrated circuits that read data andinstructions from computer readable media, such as the memory 702 andthe secondary storage device 706, and selectively execute theinstructions. In various embodiments, the processing system 704 isimplemented in various ways. For example, the processing system 704 canbe implemented as one or more processing cores. In another example, theprocessing system 704 can comprise one or more separate microprocessors.In yet another example embodiment, the processing system 704 cancomprise an application-specific integrated circuit (ASIC) that providesspecific functionality. In yet another example, the processing system704 provides specific functionality by using an ASIC and by executingcomputer-executable instructions.

The network interface card 708 is a device or article of manufacturethat enables the computing device 104 to send data to and receive datafrom a communication network. In different embodiments, the networkinterface card 708 is implemented in different ways. For example, thenetwork interface card 708 can be implemented as an Ethernet interface,a token-ring network interface, a fiber optic network interface, awireless network interface (e.g., Wi-Fi, WiMax, etc.), or another typeof network interface.

The video interface 710 enables the computing device 104 to output videoinformation to the display unit 200. The display unit 200 can be varioustypes of devices for displaying video information, such as a cathode-raytube display, an LCD display panel, a plasma screen display panel, atouch-sensitive display panel, an LED screen, or a projector. The videointerface 710 can communicate with the display unit 200 in various ways,such as via a Universal Serial Bus (USB) connector, a VGA connector, adigital visual interface (DVI) connector, an S-Video connector, aHigh-Definition Multimedia Interface (HDMI) interface, or a DisplayPortconnector.

The external component interface 714 enables the computing device 104 tocommunicate with external devices. For example, the external componentinterface 714 can be a USB interface, a FireWire interface, a serialport interface, a parallel port interface, a PS/2 interface, and/oranother type of interface that enables the computing device 104 tocommunicate with external devices. In various embodiments, the externalcomponent interface 714 enables the computing device 104 to communicatewith various external components, such as external storage devices,input devices, speakers, modems, media player docks, other computingdevices, scanners, digital cameras, and fingerprint readers.

The communications medium 716 facilitates communication among thehardware components of the computing device 104. In the example of FIG.7, the communications medium 716 facilitates communication among thememory 702, the processing system 704, the secondary storage device 706,the network interface card 708, the video interface 710, and theexternal component interface 714. The communications medium 716 can beimplemented in various ways. For example, the communications medium 716can comprise a PCI bus, a PCI Express bus, an accelerated graphics port(AGP) bus, a serial Advanced Technology Attachment (ATA) interconnect, aparallel ATA interconnect, a Fiber Channel interconnect, a USB bus, aSmall Computing system Interface (SCSI) interface, or another type ofcommunications medium.

The memory 702 stores various types of data and/or softwareinstructions. For instance, in the example of FIG. 7, the instructions720 in the memory 702 can include Basic Input/Output System (BIOS)instructions 726 and operating system instructions 728. Execution of theBIOS instructions 726 by the processing system 704 causes the computingdevice 104 to boot up. Execution of the operating system instructions728 causes the computing device 104 to provide an operating system thatcoordinates the activities and sharing of resources of the computingdevice 104. Furthermore, the memory 702 stores application software 730.Execution of the application software 730 by the processing system 704configures the computing device 104 to provide one or more applications.The memory 702 also stores data 718 used by programs that execute on thecomputing device 104.

The various embodiments described above are provided by way ofillustration only and should not be construed as limiting. Those skilledin the art will readily recognize various modifications and changes thatmay be made without following the example embodiments and applicationsillustrated and described herein. For example, the operations shown inthe figures are merely examples. In various embodiments, similaroperations can include more or fewer steps than those shown in thefigures. Furthermore, in other embodiments, similar operations caninclude the steps of the operations shown in the figures in differentorders or be executed concurrently. Although the subject matter has beendescribed in language specific to structural features and/ormethodological acts, it is to be understood that the subject matterdefined in the appended claims is not necessarily limited to thespecific features or acts described above. Rather, the specific featuresand acts described above are disclosed as example forms of implementingthe claims.

What is claimed is:
 1. A method for providing contextually-appropriatetask reminders, the method comprising: receiving a selection of a tasksource element; generating a task reminder based on the task sourceelement; learning, by a computing device, over time how to identifycontextually-appropriate task reminders in different contexts;displaying a graphical user interface on a display unit, the graphicaluser interface containing a reminder area and an activity area; as thetask source element changes, updating the reminder area to generate,update or delete task reminders such that the task reminders arecontextually-appropriate; and as a current context of the user changes,updating the reminder area such that the reminder area contains the taskreminders that are contextually-appropriate in the current context ofthe user.
 2. The method of claim 1, further comprising: receivingcontext data that provides information about the current context of theuser; and using the context data to generate data representative of alikelihood that the user would find the given task reminder helpful inthe current context; and wherein displaying the graphical user interfacecomprises displaying the given task reminder in the reminder area afterdetermining that the likelihood is sufficiently great.
 3. The method ofclaim 2, further comprising: calculating scores for a plurality of taskreminders based at least in part of the context data, the given taskreminder being among the plurality of task reminders, the score for thegiven task reminder being the data representative of the likelihood thatthe user would find the given task reminder helpful; and ranking theplurality of task reminders based on the scores for the task reminders;wherein displaying the graphical user interface comprises: displayingones of the task reminders having highest ranks either withoutdisplaying ones of the task reminders having lower ranks or displayingthe task reminders having lower ranks less prominently than the taskreminders having the highest ranks.
 4. The method of claim 3, whereincalculating the scores for the plurality of task reminders comprises:providing the context data to input layer artificial neurons in anartificial neural network; and receiving a given score for the giventask reminder from one or more output layer artificial neurons in theartificial neural network, the given task reminder being among theplurality of task reminders.
 5. The method of claim 2, wherein learningover time how to identify the contextually-appropriate task reminderscomprises: receiving feedback from the user; and modifying how thecomputing device identifies the contextually-appropriate task remindersin response to the feedback.
 6. The method of claim 4, wherein receivingthe feedback comprises receiving input from the user to reorder the taskreminders in the reminder area.
 7. The method of claim 2, whereinreceiving the context data comprises receiving at least some of thecontext data from another computing device.
 8. The method of claim 7,wherein receiving the context data comprises receiving at least some ofthe context data from a source within the computing device.
 9. Themethod of claim 1, further comprising generating a plurality of taskreminders, the contextually-appropriate task reminders being among theplurality of task reminders, each task reminder in the plurality of taskreminders corresponding to a task to be performed by the user.
 10. Themethod of claim 9, wherein generating the plurality of task reminderscomprises generating the plurality of task reminders based on task itemsin a task list of the user.
 11. The method of claim 9, furthercomprising: displaying a document in the graphical user interface;receiving input from the user to flag the document; and whereingenerating the plurality of task reminders comprises generating thegiven task reminder in response to receiving an input from the user toflag the document.
 12. The method of claim 9, further comprising:displaying a document in the graphical user interface; identifying a setof task source elements within the document; receiving input to drag agiven task source element to the reminder area, the given task sourceelement being in the set of task source elements; and wherein generatingthe plurality of task reminders comprises generating the given taskreminder in response to receiving an input.
 13. The method of claim 1,further comprising: determining that the given task reminder that wasdetermined not to be contextually-appropriate in one context to beappropriate in the current context of the user; and performing a givennotification action in response to determining that the given taskreminder is now contextually appropriate.
 14. The method of claim 13,further comprising: learning, by the computing device, over time how toselect appropriate notification actions given the different contexts;and determining that the given notification action is more likely than aplurality of other available notification actions to be a mostappropriate notification action given the current context of the user.15. A computing device comprising: one or more computer storage mediathat store instructions; and one or more processing units that accessand execute the instructions, execution of the instructions by the oneor more processing units configuring the computing device such that thecomputing device: receives a selection of a task source element;generates a task reminder based on the task source element; learns overtime how to identify contextually-appropriate task reminders fordifferent contexts of a user; and causes a display unit to display agraphical user interface, the graphical user interface containing areminder area and an activity area, the reminder area being updated asthe task source element changes to to generate, update or delete taskreminders such that the task reminders are contextually-appropriate andthe reminder area being updated as a current context of the user changessuch that the reminder area contains the task reminders that arecontextually-appropriate in the current context of the user.
 16. Thecomputing device of claim 15, wherein execution of the instructions bythe one or more processing units configures the computing device suchthat the computing device: receives context data that providesinformation about a current geographical location of the computingdevice; and learns over time that it is contextually-appropriate todisplay the task reminders corresponding to tasks involving a givengeographical location when the current geographical location of thecomputing device is within a given distance of the given geographicallocation.
 17. The computing device of claim 15, wherein execution of theinstructions by the one or more processing units configures thecomputing device such that the computing device: generates a pluralityof task reminders, each of the task reminders corresponding to a task tobe performed by the user; and scrolling the reminder area in response toinput from the user, wherein prior to scrolling the reminder area, thereminder area contains ones of the task reminders that the computingdevice determines to be most likely to be helpful to the user given thecurrent context of the user, wherein after scrolling the reminder area,the reminder area contains ones of the task reminders that the computingdevice determines to be less likely to be helpful to the user given thecurrent context of the user.
 18. A computer storage media that storeinstructions, wherein execution of the instructions by the one or moreprocessing units perform the steps of: learning over time how toidentify contextually-appropriate task reminders for different contextsof a user; causing a display unit to display a graphical user interface,the graphical user interface containing a reminder area that is updatedas a current context of the user changes such that the reminder areacontains task reminders that are contextually-appropriate in the currentcontext of the user receiving input from the user to drag a contact tothe reminder area, the contact comprising contact information foranother user; generating a given task reminder; and determining, afterreceiving the first context data, that the given task reminder is amongthe contextually-appropriate task reminders for a current context of theuser.
 19. The computer storage media of claim 18, wherein execution ofthe instructions by the one or more processing units configures thecomputing device such that the computing device: receiving context datathat provides information about a current geographical location of thecomputing device; and learning over time that it iscontextually-appropriate to display task reminders corresponding totasks involving a given geographical location when the currentgeographical location of the computing device is within a given distanceof the given geographical location.
 20. The computer storage media ofclaim 18, wherein execution of the instructions by the one or moreprocessing units configures the computing device such that the computingdevice: generating a plurality of task reminders, each of the taskreminders corresponding to a task to be performed by the user; andscrolling the reminder area in response to input from the user, whereinprior to scrolling the reminder area, the reminder area contains ones ofthe task reminders that the computing device determines to be mostlikely to be helpful to the user given a current context of the user,wherein after scrolling the reminder area, the reminder area containsones of the task reminders that the computing device determines to beless likely to be helpful to the user given the current context of theuser.